#pragma once

#include <string>
using namespace std;

//Base class for methods using pure virtual functions
//The three classes of employees, managers, and bosses are basically the same.
class employee_base {
public:
	employee_base(const string &name, const string &employee_ID, const string &department_ID);
	virtual ~employee_base() = default;

	void set_name(const std::string &name);
	void set_employee_ID(const std::string &employee_ID);
	void set_department_ID(const std::string &department_ID);

	string get_name() const;
	string get_employee_ID()const;
	string get_department_ID()const;

	virtual void duty() = 0;

protected:
	string name;
	string employee_ID;
	string department_ID;
};

class manager : public employee_base {
public:
	manager(const string &name, const string &employee_ID, const string &department_ID);
	void duty() override;
};

class employee : public employee_base {
public:
	employee(const string &name, const string &employee_ID, const string &department_ID);
	void duty() override;
};

class boss : public employee_base {
public:
	boss(const string &name, const string &employee_ID, const string &department_ID);
	void duty() override;
};

